package occho.data;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import occho.model.Asignatura;
import occho.model.PreguntaAlumno;
import occho.model.Tema;
import occho.model.Usuario;

/**
 *
 * @author migue
 */
public interface PreguntaAlumnoDAO {
     
    /**
     * Inserta una PreguntaAlumno en la base de datos
     * @param PreguntaAlumno
     * @return true si PreguntaAlumno se inserta correctamente
     * @throws SQLException 
     */
    public boolean insertarPreguntaAlumno(PreguntaAlumno PreguntaAlumno) throws SQLException;
    
    /**
     * Elimina una PreguntaAlumno de la base de datos
     * @param PreguntaAlumno
     * @return true si la PreguntaAlumno se elimina correctamente
     * @throws SQLException 
     */
    public boolean eliminarPreguntaAlumno(PreguntaAlumno PreguntaAlumno) throws SQLException;
    
    /**
     * Selecciona una pregunta_alumno
     * @param idAlumno 
     * @param idPregunta 
     * @param idTest 
     * @return una pregunta_alumno
     * @throws SQLException 
     */
    public PreguntaAlumno seleccionarPreguntaAlumno(int idAlumno,int idPregunta,int idTest) throws SQLException;
    
  
    /**
     * Selecciona todas las preguntas del mismo alumno
     * @param idAlumno
     * @return Lista de preguntas del mismo alumno
     * @throws SQLException 
     */
    public List<PreguntaAlumno> seleccionarPreguntaAlumno(int idAlumno) throws SQLException;
    
     /**
     * Devuelve la lista de asignaturas para los que el alumno ha realizado tests
     * @param usuario 
     * @return lista de asignaturas
     * @throws SQLException
     * @throws ClassNotFoundException  
     */
    public List<Asignatura> seleccionarAsignaturasAlumno(Usuario usuario) throws SQLException,ClassNotFoundException;
    
    /**
     * Devuelve la lista de temas para los que el alumno ha realizado tests
     * @param idAlumno 
     * @return List<Tema>
     * @throws SQLException
     * @throws ClassNotFoundException  
     */
    public List<Tema> seleccionarTemasAlumno(int idAlumno) throws SQLException,ClassNotFoundException;
    
    /**
     * Devuelve la media del alumno para un determinado test
     * @param idAlumno idTest
     * @param idTest 
     * @return media del alumno
     * @throws SQLException 
     */
    public float getMediaTestAlumno(int idAlumno,int idTest) throws SQLException;
    
    /**
     * Devuelve en un Map la media del alumno por tema
     * @param idAlumno 
     * @return pares(tema,media) para el alumno especificado
     * @throws SQLException
     * @throws ClassNotFoundException  
     */
    public HashMap<Tema,Float> getMediaTemasAlumno(int idAlumno) throws SQLException,ClassNotFoundException;
    
    /**
     * Devuelve en un Map la media del alumno por asignatura
     * @param idAlumno 
     * @return pares(asignatura,media) para el alumno especificado
     * @throws SQLException
     * @throws ClassNotFoundException  
     */
    public HashMap<Asignatura,Float> getMediaAsignaturasAlumno(int idAlumno) throws SQLException,ClassNotFoundException;
    
    
    /**
     * Cambia el setAutoCommit de la conexión.
     * @param b
     * @throws SQLException
     */
    public void setAutoCommit(boolean b) throws SQLException ;
    
    /**
     * Actualiza una PreguntaAlumno en la base de datos.
     * @param pa
     * @return boolean
     * @throws SQLException
     * @throws ClassNotFoundException
     */
    public boolean actualizarPreguntaAlumno(PreguntaAlumno pa) throws SQLException,ClassNotFoundException;
    
    /**
     * Realiza commit en la base de datos.
     * @throws SQLException
     */
    public void commit() throws SQLException;
    
    /**
     * Realiza rollback en la base de datos.
     * @throws SQLException
     */
    public void rollback() throws SQLException;
    
    /**
     * Devuelve una lista con los resultados de las preguntas de un alumno en un text.
     * @param idTest
     * @return List<PreguntaAlumno>
     * @throws SQLException
     */
    public List<PreguntaAlumno> seleccionarPreguntaAlumnoTest(int idTest) throws SQLException ;
    
    /**
     * 
     * @param idtest
     * @return List<Integer>
     * @throws SQLException
     */
    public List<Integer> seleccionarAlumnosTest(int idtest) throws SQLException;
}
